package pt.processingQueues.principal; import java.util.Random; import java.util.logging.Level; import java.util.logging.Logger; /** * separate thread that knows to produce a client at a certain interval between * MinArrivalTime and MaxArraivalTime(given by user that performs the * simulation) * * @author Chiti * */ public class ClientGenerator implements Runnable { private static final Logger LOGGER = Logger.getLogger(ClientGenerator.class.getName()); private Scheduler scheduler; private int maxArrivalTime; private int minArrivalTime; private int maxServiceTime; private int minServiceTime; private int clientsGenerated = 0; private int clientsGeneratedSince = 0; private boolean isRunning; public ClientGenerator(int maxArrivalTime, int minArrivalTime, int maxServiceTime, int minServiceTime,Scheduler scheduler) { this.scheduler=scheduler; this.maxArrivalTime = maxArrivalTime; this.minArrivalTime = minArrivalTime; this.maxServiceTime = maxServiceTime; this.minServiceTime = minServiceTime; this.isRunning = true; } @Override public void run() { LOGGER.info("Logger Name: "+LOGGER.getName()); Random r = new Random(); int arrivalTime; int processingTime; while (true) { while (isRunning) { arrivalTime = r.nextInt(maxArrivalTime - minArrivalTime) + minArrivalTime; try { Thread.sleep(arrivalTime * 1000); processingTime = r.nextInt(maxServiceTime - minServiceTime) + minServiceTime; clientsGenerated++; clientsGeneratedSince++; scheduler.addClient(new Client(clientsGenerated, processingTime)); } catch (InterruptedException ex) { LOGGER.log(Level.SEVERE, "Cannot add generated client", ex); } } } } /** * @return the clientsGenerated */ public int getClientsGenerated() { return clientsGenerated; } /** * @return the clientsGeneratedSince */ public int getClientsGeneratedSince() { int returnNumber=clientsGeneratedSince; clientsGeneratedSince=0; return returnNumber; } /** * @return the isRunning */ public boolean isRunning() { return isRunning; } /** * @param isRunning */ public void setRunning(boolean isRunning) { this.isRunning = isRunning; } }